home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / clickrun / clickgui.e < prev    next >
Text File  |  1994-05-02  |  28KB  |  865 lines

  1. /*******************************************************************************************/
  2. /* Source code generate by Gui2E v0.1 © 1994 NasGûl                       */
  3. /*******************************************************************************************/
  4. /********************************************************************************
  5.  * << EUTILS HEADER >>
  6.  ********************************************************************************
  7.  ED
  8.  EC
  9.  PREPRO
  10.  SOURCE
  11.  EPPDEST
  12.  EXEC
  13.  ISOURCE
  14.  HSOURCE
  15.  ERROREC
  16.  ERROREPP
  17.  VERSION
  18.  REVISION
  19.  NAMEPRG
  20.  NAMEAUTHOR
  21.  ********************************************************************************
  22.  * HISTORY :
  23.  *******************************************************************************/
  24.  
  25. OPT OSVERSION=37
  26.  
  27. MODULE 'intuition/intuition','gadtools','libraries/gadtools','intuition/gadgetclass','intuition/screens',
  28.        'graphics/text','exec/lists','exec/nodes','exec/ports','eropenlib','utility/tagitem'
  29. MODULE 'clickgui'
  30. MODULE 'asl','libraries/asl'
  31. MODULE 'reqtools','libraries/reqtools'
  32. MODULE 'dos/dostags','wbmessage','dos/dosextens'
  33. MODULE 'wb','workbench/workbench'
  34. MODULE 'dos/notify'
  35. CONST F_LOAD=0,
  36.       F_SAVE=1,
  37.       ACTION_LIST=0,
  38.       ACTION_CONF=1,
  39.       GET_STACK=0,
  40.       GET_PRI=1,
  41.       MODE_WB=0,
  42.       MODE_CLI=1
  43.  
  44. ENUM ER_NONE,ER_LOCKSCREEN,ER_VISUAL,ER_CONTEXT,ER_MENUS,ER_GADGET,ER_WINDOW,
  45.      ER_MEM,ER_PORT,ER_NOFILE,ER_FORMAT,OK_FICHIER,ER_APPWIN
  46.  
  47. DEF screen:PTR TO screen,
  48.     visual=NIL,
  49.     tattr:PTR TO textattr,
  50.     reelquit=FALSE,
  51.     offy
  52. /****************************************
  53.  * cr Definitions
  54.  ****************************************/
  55. DEF cr_window=NIL:PTR TO window
  56. DEF cr_glist=NIL
  57. DEF cr_menu=NIL
  58. DEF cr_appwindow
  59. /***********
  60.  * Gadgets
  61.  ***********/
  62. ENUM GA_GLIST,GA_GADD,GA_GREM,GA_GQUIT,GA_GWB,GA_GCLI,GA_GINFO
  63. /************************
  64.  * Gadgets labels of cr
  65.  ************************/
  66. DEF glist,gadd,grem,gquit,gwb,gcli,ginfo
  67. /******************
  68.  * liste
  69.  ******************/
  70. DEF commandelist:PTR TO lh
  71. DEF emptylist:PTR TO lh
  72. /******************
  73.  * Application
  74.  ******************/
  75. DEF currentnode
  76. DEF wb_handle
  77. DEF prgport:PTR TO mp
  78. DEF defdir[256]:STRING
  79. DEF zoomed=FALSE
  80. DEF nreq:PTR TO notifyrequest
  81. DEF nreqsig=-1
  82. /***************************************/
  83. /* Gestion de la liste               */
  84. /***************************************/
  85. PROC p_InitList() HANDLE /*"p_InitList()"*/
  86. /********************************************************************************
  87.  * Para     : NONE
  88.  * Return    : address of the new list if ok,else NIL.
  89.  * Description    : Initialise a list.
  90.  *******************************************************************************/
  91.     DEF i_list:PTR TO lh
  92.     i_list:=New(SIZEOF lh)
  93.     i_list.tail:=0
  94.     i_list.head:=i_list.tail
  95.     i_list.tailpred:=i_list.head
  96.     i_list.type:=0
  97.     i_list.pad:=0
  98.     IF i_list THEN Raise(i_list) ELSE Raise(NIL)
  99. EXCEPT
  100.     RETURN exception
  101. ENDPROC
  102. PROC p_EmptyList(adr_list) /*"p_EmptyList(adr_list)"*/
  103. /********************************************************************************
  104.  * Para     : address of list.
  105.  * Return    : TRUE if list is empty,else address of list.
  106.  * Description    : Look if a list is empty.
  107.  *******************************************************************************/
  108.     DEF e_list:PTR TO lh,count=0
  109.     DEF e_node:PTR TO ln
  110.     e_list:=adr_list
  111.     e_node:=e_list.head
  112.     WHILE e_node
  113.     IF e_node.succ<>0 THEN INC count
  114.     e_node:=e_node.succ
  115.     ENDWHILE
  116.     IF count=0 THEN RETURN TRUE ELSE RETURN e_list
  117. ENDPROC
  118. PROC p_AjouteNode(ptr_list,node_name) HANDLE /*"p_AjouteNode(ptr_list,node_name)"*/
  119. /********************************************************************************
  120.  * Para     : address of list,the name of a node.
  121.  * Return    : the number of the new selected node in the list.
  122.  * Description    : Add a node and return the new current node (for LISTVIEW_KIND).
  123.  *******************************************************************************/
  124.     DEF a_list:PTR TO lh
  125.     DEF a_node:PTR TO ln
  126.     DEF nn=NIL
  127.     a_list:=ptr_list
  128.     a_node:=New(SIZEOF ln)
  129.     a_node.succ:=0
  130.     a_node.name:=String(EstrLen(node_name))
  131.     StrCopy(a_node.name,node_name,ALL)
  132.     AddTail(a_list,a_node)
  133.     nn:=p_GetNumNode(a_list,a_node)
  134.     IF nn=0
  135.     a_list.head:=a_node
  136.     a_node.pred:=0
  137.    /**********************************************
  138.     a_node.succ:=0
  139.     a_list.tailpred:=a_node
  140.     ELSE
  141.     a_node.succ:=0
  142.     a_node.pred:=p_GetAdrNode(a_list,nn-1)
  143.     a_list.tailpred:=a_node
  144.     **********************************************/
  145.     ENDIF
  146.     Raise(nn)
  147. EXCEPT
  148.     RETURN exception
  149. ENDPROC
  150. PROC p_GetAdrNode(ptr_list,num_node) /*"p_GetAdrNode(ptr_list,num_node)"*/
  151. /********************************************************************************
  152.  * Para     : address of list,number's node.
  153.  * Return    : address of node or NIL.
  154.  * Description    : Find the address of a node.
  155.  *******************************************************************************/
  156.     DEF g_list:PTR TO lh
  157.     DEF g_node:PTR TO ln
  158.     DEF count=0
  159.     g_list:=ptr_list
  160.     g_node:=g_list.head
  161.     WHILE g_node
  162.     IF count=num_node THEN RETURN g_node
  163.     INC count
  164.     g_node:=g_node.succ
  165.     ENDWHILE
  166.     RETURN NIL
  167. ENDPROC
  168. PROC p_GetNumNode(ptr_list,adr_node) /*"p_GetNumNode(ptr_list,adr_node)"*/
  169. /********************************************************************************
  170.  * Para     : address of list,address of node
  171.  * Return    : the number of the node.
  172.  * Description    : Find the number of a node.
  173.  *******************************************************************************/
  174.     DEF g_list:PTR TO lh
  175.     DEF g_node:PTR TO ln
  176.     DEF count=0
  177.     g_list:=ptr_list
  178.     g_node:=g_list.head
  179.     WHILE g_node
  180.     IF g_node=adr_node THEN RETURN count
  181.     INC count
  182.     g_node:=g_node.succ
  183.     ENDWHILE
  184.     RETURN NIL
  185. ENDPROC
  186. PROC p_RemoveEmptyList(list:PTR TO lh) /*"p_RemoveEmptyList(list:PTR TO lh)"*/
  187.     DEF node:PTR TO ln
  188.     node:=list.head
  189.     WHILE node
  190.     IF node.succ<>0
  191.         IF node.name THEN Dispose(node.name)
  192.     ENDIF
  193.     IF node.succ=0 THEN RemTail(list)
  194.     IF node.pred=0 THEN RemHead(list)
  195.     IF (node.succ<>0) AND (node.pred<>0) THEN Remove(node)
  196.     node:=node.succ
  197.     ENDWHILE
  198. ENDPROC
  199. PROC p_CleanCRList(list:PTR TO lh) /*"p_CleanCRList(list:PTR TO lh)"*/
  200.     DEF cnode:PTR TO clicknode
  201.     DEF node:PTR TO ln
  202.     cnode:=list.head
  203.     WHILE cnode
  204.     node:=cnode
  205.     IF node.succ<>0
  206.         IF node.name THEN Dispose(node.name)
  207.         IF cnode.currentdir THEN Dispose(cnode.currentdir)
  208.         IF cnode THEN Dispose(cnode)
  209.     ENDIF
  210.     IF node.succ=0 THEN RemTail(list)
  211.     IF node.pred=0 THEN RemHead(list)
  212.     IF (node.succ<>0) AND (node.pred<>0) THEN Remove(node)
  213.     cnode:=node.succ
  214.     ENDWHILE
  215. ENDPROC
  216. PROC p_AjouteCRNode(list:PTR TO lh,nom,thedir) /*"p_AjouteCRNode(list,nom,thedir)"*/
  217.     DEF mycrnode:PTR TO clicknode
  218.     DEF node:PTR TO ln
  219.     DEF nn
  220.     node:=New(SIZEOF ln)
  221.     mycrnode:=New(SIZEOF clicknode)
  222.     node.succ:=0
  223.     node.name:=String(EstrLen(nom))
  224.     StrCopy(node.name,nom,ALL)
  225.     CopyMem(node,mycrnode.node,SIZEOF ln)
  226.     AddTail(commandelist,mycrnode.node)
  227.     nn:=p_GetNumNode(commandelist,mycrnode.node)
  228.     IF nn=0
  229.     list.head:=mycrnode.node
  230.     node.pred:=0
  231.     ENDIF
  232.     mycrnode.currentdir:=String(EstrLen(thedir))
  233.     StrCopy(mycrnode.currentdir,thedir,ALL)
  234.     mycrnode.stack:=p_GetReqVal(GET_STACK,nom)
  235.     mycrnode.pri:=p_GetReqVal(GET_PRI,nom)
  236.     IF node THEN Dispose(node)
  237.     RETURN nn
  238. ENDPROC
  239. PROC p_RemoveCRNode(list:PTR TO lh,numnode) /*"p_RemoveCRNode(list:PTR TO lh,numnode)"*/
  240.     DEF rcr:PTR TO clicknode
  241.     DEF rnode:PTR TO ln
  242.     DEF count=0,retour=NIL
  243.     DEF newn:PTR TO ln
  244.     rcr:=list.head
  245.     WHILE rcr
  246.     rnode:=rcr
  247.     IF count=numnode
  248.         IF rnode.succ<>0
  249.         IF rnode.name THEN Dispose(rnode.name)
  250.         IF rcr.currentdir THEN Dispose(rcr.currentdir)
  251.         IF rcr THEN Dispose(rcr)
  252.         ENDIF
  253.         IF rnode.succ=0
  254.         RemTail(list)
  255.         retour:=numnode-1
  256.         ELSEIF rnode.pred=0
  257.         RemHead(list)
  258.         retour:=numnode
  259.         newn:=p_GetAdrNode(list,numnode)
  260.         list.head:=newn
  261.         newn.pred:=0
  262.         ELSEIF (rnode.succ<>0) AND (rnode.pred<>0)
  263.         Remove(rnode)
  264.         retour:=numnode-1
  265.         ENDIF
  266.     ENDIF
  267.     INC count
  268.     rcr:=rnode.succ
  269.     ENDWHILE
  270.     RETURN retour
  271. ENDPROC
  272. /****************************************/
  273. /* Libraries and window proc        */
  274. /****************************************/
  275. PROC p_OpenLibraries() HANDLE /*"p_OpenLibraries()"*/
  276.     IF (intuitionbase:=OpenLibrary('intuition.library',37))=NIL THEN Raise(ER_INTUITIONLIB)
  277.     IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN Raise(ER_GADTOOLSLIB)
  278.     IF (gfxbase:=OpenLibrary('graphics.library',37))=NIL THEN Raise(ER_GRAPHICSLIB)
  279.     IF (aslbase:=OpenLibrary('asl.library',37))=NIL THEN Raise(ER_ASLLIB)
  280.     IF (reqtoolsbase:=OpenLibrary('reqtools.library',38))=NIL THEN Raise(ER_REQTOOLSLIB)
  281.     IF (workbenchbase:=OpenLibrary('workbench.library',37))=NIL THEN Raise(ER_WORKBENCHLIB)
  282.     Raise(ER_NONE)
  283. EXCEPT
  284.     RETURN exception
  285. ENDPROC
  286. PROC p_CloseLibraries()  /*"p_CloseLibraries()"*/
  287.     IF workbenchbase THEN CloseLibrary(workbenchbase)
  288.     IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
  289.     IF aslbase THEN CloseLibrary(aslbase)
  290.     IF gfxbase THEN CloseLibrary(gfxbase)
  291.     IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  292.     IF intuitionbase THEN CloseLibrary(intuitionbase)
  293. ENDPROC
  294. PROC p_SetUpScreen() HANDLE /*"p_SetUpScreen()"*/
  295.     IF (screen:=LockPubScreen('Workbench'))=NIL THEN Raise(ER_LOCKSCREEN)
  296.     IF (visual:=GetVisualInfoA(screen,NIL))=NIL THEN Raise(ER_VISUAL)
  297.     offy:=screen.wbortop+Int(screen.rastport+58)+1
  298.     Raise(ER_NONE)
  299. EXCEPT
  300.     RETURN exception
  301. ENDPROC
  302. PROC p_SetDownScreen() /*"p_SetDownScreen()"*/
  303.     IF visual THEN FreeVisualInfo(visual)
  304.     IF screen THEN UnlockPubScreen(NIL,screen)
  305. ENDPROC
  306. PROC p_InitcrWindow() HANDLE /*"p_InitcrWindow()"*/
  307.     IF (cr_glist:=CreateContext({cr_glist}))=NIL THEN Raise(ER_CONTEXT)
  308.     IF (cr_menu:=CreateMenusA([1,0,'Project',0,0,0,0,
  309.                    2,0,'Load','L',0,0,0,
  310.                    2,0,'Save','S',0,0,0,
  311.                    2,0,'Quit','Q',0,0,0,
  312.                    1,0,' Options ',0,0,0,0,
  313.                    2,0,'Stack   ','A',0,0,0,
  314.                    2,0,'Priority','P',0,0,0,
  315.                    0,0,0,0,0,0,0]:newmenu,NIL))=NIL THEN Raise(ER_MENUS)
  316.     IF LayoutMenusA(cr_menu,visual,NIL)=FALSE THEN Raise(ER_MENUS)
  317.     IF (glist:=CreateGadgetA(LISTVIEW_KIND,cr_glist,[4,12,153,41,'',tattr,0,0,visual,0]:newgadget,[GTLV_SHOWSELECTED,NIL,GTLV_LABELS,-1,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  318.     IF (gadd:=CreateGadgetA(BUTTON_KIND,glist,[159,12,62,12,'_Add',tattr,1,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  319.     IF (grem:=CreateGadgetA(BUTTON_KIND,gadd,[223,12,62,12,'_Rem',tattr,2,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  320.     IF (gquit:=CreateGadgetA(BUTTON_KIND,grem,[159,36,126,12,'_Quit',tattr,3,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  321.     IF (gwb:=CreateGadgetA(BUTTON_KIND,gquit,[161,24,62,12,'_WBRun',tattr,4,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  322.     IF (gcli:=CreateGadgetA(BUTTON_KIND,gwb,[223,24,62,12,'_CliRun',tattr,5,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  323.     IF (ginfo:=CreateGadgetA(TEXT_KIND,gcli,[7,48,278,12,'',tattr,6,0,visual,0]:newgadget,[GTTX_BORDER,TRUE,GTTX_TEXT,'',GTTX_COPYTEXT,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  324.     Raise(ER_NONE)
  325. EXCEPT
  326.     RETURN exception
  327. ENDPROC
  328. PROC p_RendercrWindow() /*"p_RendercrWindow()"*/
  329.     DEF inf[256]:STRING
  330.     DEF infonode:PTR TO clicknode
  331.     DEF cn:PTR TO ln
  332.     Gt_SetGadgetAttrsA(glist,cr_window,NIL,[GTLV_LABELS,-1,TAG_DONE,0])
  333.     infonode:=p_GetAdrNode(commandelist,currentnode)
  334.     cn:=infonode
  335.     StringF(inf,'Stack :\d Prioriy :\d',infonode.stack,infonode.pri)
  336.     IF p_EmptyList(commandelist)=-1
  337.     Gt_SetGadgetAttrsA(glist,cr_window,NIL,[GA_DISABLED,TRUE,GTLV_SHOWSELECTED,NIL,GTLV_LABELS,emptylist,TAG_DONE,0])
  338.     Gt_SetGadgetAttrsA(grem,cr_window,NIL,[GA_DISABLED,TRUE,TAG_DONE,0])
  339.     Gt_SetGadgetAttrsA(gwb,cr_window,NIL,[GA_DISABLED,TRUE,TAG_DONE,0])
  340.     Gt_SetGadgetAttrsA(gcli,cr_window,NIL,[GA_DISABLED,TRUE,TAG_DONE,0])
  341.     Gt_SetGadgetAttrsA(ginfo,cr_window,NIL,[GTTX_BORDER,TRUE,GTTX_TEXT,'Empty list.',TAG_DONE,0])
  342.     IF zoomed=FALSE
  343.         SetWindowTitles(cr_window,'ClickRun v0.1','Made With GadToolsBox v2.0 © 1991-1993')
  344.     ELSE
  345.         SetWindowTitles(cr_window,'No Command','Made With GadToolsBox v2.0 © 1991-1993')
  346.     ENDIF
  347.     ELSE
  348.     Gt_SetGadgetAttrsA(glist,cr_window,NIL,[GA_DISABLED,FALSE,GTLV_SHOWSELECTED,TRUE,GTLV_SELECTED,currentnode,GTLV_LABELS,commandelist,TAG_DONE,0])
  349.     Gt_SetGadgetAttrsA(grem,cr_window,NIL,[GA_DISABLED,FALSE,TAG_DONE,0])
  350.     Gt_SetGadgetAttrsA(gwb,cr_window,NIL,[GA_DISABLED,FALSE,TAG_DONE,0])
  351.     Gt_SetGadgetAttrsA(gcli,cr_window,NIL,[GA_DISABLED,FALSE,TAG_DONE,0])
  352.     Gt_SetGadgetAttrsA(ginfo,cr_window,NIL,[GTTX_BORDER,TRUE,GTTX_TEXT,inf,TAG_DONE,0])
  353.     IF zoomed=FALSE
  354.         SetWindowTitles(cr_window,'ClickRun v0.1','Made With GadToolsBox v2.0 © 1991-1993')
  355.     ELSE
  356.         SetWindowTitles(cr_window,cn.name,'Made With GadToolsBox v2.0 © 1991-1993')
  357.     ENDIF
  358.     ENDIF
  359.     RefreshGList(glist,cr_window,NIL,-1)
  360.     Gt_RefreshWindow(cr_window,NIL)
  361. ENDPROC
  362. PROC p_OpencrWindow() HANDLE /*"p_OpencrWindow()"*/
  363.     IF (cr_window:=OpenWindowTagList(NIL,
  364.               [WA_LEFT,10,
  365.                WA_TOP,10,
  366.                WA_WIDTH,290,
  367.                WA_HEIGHT,62,
  368.                WA_IDCMP,$378+IDCMP_REFRESHWINDOW,
  369.                WA_FLAGS,$102E+WFLG_HASZOOM,
  370.                WA_GADGETS,cr_glist,
  371.                WA_ZOOM,[10,10,290,11]:INT,
  372.                WA_TITLE,'ClickRun v0.1',
  373.                WA_SCREENTITLE,'Made With GadToolsBox v2.0 © 1991-1993',
  374.                TAG_DONE]))=NIL THEN Raise(ER_WINDOW)
  375.     IF SetMenuStrip(cr_window,cr_menu)=FALSE THEN Raise(ER_MENUS)
  376.     Gt_RefreshWindow(cr_window,NIL)
  377.     p_RendercrWindow()
  378.     IF (cr_appwindow:=AddAppWindowA(0,0,cr_window,prgport,NIL))=NIL THEN Raise(ER_APPWIN)
  379.     Raise(ER_NONE)
  380. EXCEPT
  381.     RETURN exception
  382. ENDPROC
  383. PROC p_RemcrWindow() /*"p_RemcrWindow()"*/
  384.     IF cr_appwindow THEN RemoveAppWindow(cr_appwindow)
  385.     IF cr_window THEN CloseWindow(cr_window)
  386.     IF cr_menu THEN FreeMenus(cr_menu)
  387.     IF cr_glist THEN FreeGadgets(cr_glist)
  388. ENDPROC
  389. /******************************************/
  390. /* Message proc               */
  391. /******************************************/
  392. PROC p_LookAllMessage() /*"p_LookAllMessage()"*/
  393.     DEF sigreturn
  394.     DEF crport:PTR TO mp
  395.     IF cr_window THEN crport:=cr_window.userport ELSE crport:=NIL
  396.     sigreturn:=Wait(Shl(1,prgport.sigbit) OR Shl(1,crport.sigbit) OR
  397.             Shl(1,nreq.signalnum) OR $F000)
  398.     IF (sigreturn AND Shl(1,prgport.sigbit))
  399.     p_LookAppMessage()
  400.     ENDIF
  401.     IF (sigreturn AND Shl(1,nreq.signalnum))
  402.     p_ReadConfig('Env:Clk.prefs')
  403.     p_RendercrWindow()
  404.     ENDIF
  405.     IF (sigreturn AND Shl(1,crport.sigbit))
  406.     p_LookcrMessage()
  407.     ENDIF
  408.     IF (sigreturn AND $F000)
  409.     reelquit:=TRUE
  410.     ENDIF
  411. ENDPROC
  412. PROC p_LookcrMessage() /*"p_LookcrMessage()"*/
  413.     DEF mes:PTR TO intuimessage
  414.     DEF g:PTR TO gadget
  415.     DEF type=0,infos=NIL
  416.     DEF cn,pivz
  417.     IF mes:=Gt_GetIMsg(cr_window.userport)
  418.     type:=mes.class
  419.     SELECT type
  420.         CASE IDCMP_MENUPICK
  421.         infos:=mes.code
  422.         SELECT infos
  423.             CASE $F800
  424.             p_FileRequester(F_LOAD,'Load Config',ACTION_CONF)
  425.             p_RendercrWindow()
  426.             CASE $F820
  427.             IF p_EmptyList(commandelist)<>-1 THEN p_FileRequester(F_SAVE,'Save Config',ACTION_CONF)
  428.             CASE $F840;    reelquit:=TRUE
  429.             CASE $F801
  430.             IF p_ChangeCurrentData(currentnode,GET_STACK) THEN p_RendercrWindow()
  431.             CASE $F821
  432.             IF p_ChangeCurrentData(currentnode,GET_PRI) THEN p_RendercrWindow()
  433.         ENDSELECT
  434.         CASE IDCMP_CLOSEWINDOW;  reelquit:=TRUE
  435.         CASE IDCMP_REFRESHWINDOW
  436.         IF zoomed=FALSE THEN pivz:=TRUE ELSE pivz:=FALSE
  437.         zoomed:=pivz
  438.         p_RendercrWindow()
  439.         CASE IDCMP_GADGETDOWN
  440.         type:=IDCMP_GADGETUP
  441.         CASE IDCMP_GADGETUP
  442.         g:=mes.iaddress
  443.         infos:=g.gadgetid
  444.         SELECT infos
  445.             CASE GA_GLIST
  446.             IF p_EmptyList(commandelist)<>-1
  447.                 currentnode:=mes.code
  448.                 p_RendercrWindow()
  449.             ENDIF
  450.             CASE GA_GADD
  451.             IF cn:=p_FileRequester(F_LOAD,'Charger Nouvelle Commande',ACTION_LIST)
  452.                 currentnode:=cn
  453.             ENDIF
  454.             p_RendercrWindow()
  455.             CASE GA_GREM
  456.             cn:=p_RemoveCRNode(commandelist,currentnode)
  457.             /*IF cn<>NIL THEN currentnode:=cn*/
  458.             currentnode:=cn
  459.             p_RendercrWindow()
  460.             CASE GA_GQUIT;   reelquit:=TRUE
  461.             CASE GA_GWB
  462.             p_StartProgram(commandelist,currentnode,MODE_WB,0,0)
  463.             CASE GA_GCLI
  464.             p_StartProgram(commandelist,currentnode,MODE_CLI,0,0)
  465.             CASE GA_GINFO
  466.         ENDSELECT
  467.      ENDSELECT
  468.      Gt_ReplyIMsg(mes)
  469.      ENDIF
  470. ENDPROC
  471. PROC p_LookAppMessage() /*"p_LookAppMessage()"*/
  472.     DEF appmsg:PTR TO appmessage
  473.     IF appmsg:=GetMsg(prgport)
  474.     /*p_WriteFWBMessage(appmsg.numargs,appmsg.arglist)*/
  475.     p_StartProgram(commandelist,currentnode,MODE_WB,appmsg.numargs,appmsg.arglist)
  476.     ReplyMsg(appmsg)
  477.     ENDIF
  478. ENDPROC
  479. /*
  480. PROC p_WriteFWBMessage(numa,lisa:PTR TO LONG) /*"p_WriteFWBMessage(numa,lisa:PTR TO LONG)"*/
  481.    DEF b
  482.    DEF fullname[256]:STRING
  483.    WriteF('NumArgs:\d\n',numa)
  484.    FOR b:=0 TO numa-1
  485.       NameFromLock(lisa[b],fullname,256)
  486.       WriteF('Name :\s Lock:\h FuulName:\s\n',lisa[b+1],lisa[b],fullname)
  487.    ENDFOR
  488. ENDPROC
  489. */
  490. /******************************************/
  491. /* Application                  */
  492. /******************************************/
  493. PROC p_StartProgram(list:PTR TO lh,numnode,mode,numa,lisa) /*"p_StartProgram(list:PTR TO lh,numnode,mode,numa,lisa)"*/
  494.     DEF rcr:PTR TO clicknode
  495.     DEF rnode:PTR TO ln
  496.     DEF count=0
  497.     rcr:=list.head
  498.     WHILE rcr
  499.     rnode:=rcr
  500.     IF count=numnode
  501.         SELECT mode
  502.         CASE MODE_WB;     wb_WBRun(rnode.name,rcr.currentdir,rcr.stack,rcr.pri,numa,lisa)
  503.         CASE MODE_CLI;     wb_CLIRun(rnode.name,rcr.currentdir,rcr.stack,rcr.pri)
  504.         ENDSELECT
  505.     ENDIF
  506.     INC count
  507.     rcr:=rnode.succ
  508.     ENDWHILE
  509. ENDPROC
  510. PROC wb_WBRun(com,dir,st,pr,num_arg,arg_list:PTR TO LONG) HANDLE /*"wb_WBRun(com,di,st,pr,num_arg,arg_list)"*/
  511.     DEF execmsg:PTR TO mn
  512.     DEF wbsm:wbstartmsg
  513.     DEF rc=FALSE
  514.     DEF node:PTR TO ln
  515.     wbsm:=New(SIZEOF wbstartmsg)
  516.     execmsg:=wbsm
  517.     node:=execmsg
  518.     node.type:=NT_MESSAGE
  519.     node.pri:=0
  520.     execmsg.replyport:=prgport
  521.     wbsm.name:=com
  522.     wbsm.dirlock:=Lock(dir,-2)
  523.     wbsm.stack:=st
  524.     wbsm.prio:=pr
  525.     wbsm.numargs:=num_arg
  526.     wbsm.arglist:=arg_list
  527.     IF wb_handle
  528.     PutMsg(wb_handle,wbsm)
  529.     ENDIF
  530.     IF wb_handle
  531.     WaitPort(prgport)
  532.     GetMsg(prgport)
  533.     rc:=wbsm.stack
  534.     ENDIF
  535.     IF rc=0 THEN p_Alert('WBRun Failed.')
  536.     Raise(ER_NONE)
  537. EXCEPT
  538.     IF wbsm.dirlock THEN UnLock(wbsm.dirlock)
  539.     IF wbsm THEN Dispose(wbsm)
  540.     RETURN exception
  541. ENDPROC
  542. PROC wb_CLIRun(cmd,dir,sta,pp) HANDLE /*"wv_CLIRun(cmd,dir,sta,pp)"*/
  543.     DEF ofh:PTR TO filehandle
  544.     DEF ifh:PTR TO filehandle
  545.     DEF newct=NIL:PTR TO mp
  546.     DEF oldct:PTR TO mp
  547.     DEF oldcd
  548.     DEF newcd
  549.     IF ofh:=Open('NIL:',1006)
  550.     IF IsInteractive(ofh)
  551.         newct:=ofh.type
  552.         oldct:=SetConsoleTask(newct)
  553.         ifh:=Open('CONSOLE:',1005)
  554.         SetConsoleTask(oldct)
  555.     ELSE
  556.         ifh:=Open('NIL:',1005)
  557.     ENDIF
  558.     ENDIF
  559.     newcd:=Lock(dir,-2)
  560.     oldcd:=CurrentDir(newcd)
  561.     IF SystemTagList(cmd,[SYS_OUTPUT,NIL,
  562.              SYS_INPUT,NIL,
  563.              SYS_ASYNCH,TRUE,
  564.              SYS_USERSHELL,TRUE,
  565.              NP_STACKSIZE,sta,
  566.              NP_PRIORITY,pp,
  567.              NP_PATH,NIL,
  568.              NP_CONSOLETASK,newct,
  569.              0])
  570.     ENDIF
  571.     CurrentDir(oldcd)
  572.     IF newcd THEN UnLock(newcd)
  573.     IF ofh THEN Close(ofh)
  574.     IF ifh THEN Close(ifh)
  575.     Raise(ER_NONE)
  576. EXCEPT
  577.     RETURN exception
  578. ENDPROC
  579. PROC p_InitCRAPP() HANDLE /*"p_InitCRAPP()"*/
  580.     emptylist:=p_InitList()
  581.     commandelist:=p_InitList()
  582.     IF (emptylist=NIL) OR (commandelist=NIL) THEN Raise(ER_MEM)
  583.     p_AjouteNode(emptylist,' ')
  584.     IF (prgport:=CreateMsgPort())=NIL THEN Raise(ER_PORT)
  585.     Forbid()
  586.     IF (wb_handle:=FindPort('WBStart-Handler Port'))=NIL
  587.     wb_handle:=p_InitWBHandler()
  588.     ENDIF
  589.     Permit()
  590.     p_InitLockConfigFile()
  591.     Raise(ER_NONE)
  592. EXCEPT
  593.     RETURN exception
  594. ENDPROC
  595. PROC p_RemCRAPP() /*"p_RemCRAPP()"*/
  596.     IF emptylist THEN p_RemoveEmptyList(emptylist)
  597.     IF commandelist THEN p_CleanCRList(commandelist)
  598.     IF commandelist THEN Dispose(commandelist)
  599.     IF nreq THEN p_RemLockConfigFile()
  600.     IF prgport THEN DeleteMsgPort(prgport)
  601. ENDPROC
  602. PROC p_InitLockConfigFile() /*"p_InitLockConfigFile()"*/
  603.     nreq:=New(SIZEOF notifyrequest)
  604.     nreq.name:='Env:Clk.prefs'
  605.     nreq.flags:=NRF_SEND_SIGNAL
  606.     nreq.port:=FindTask(0)
  607.     nreq.signalnum:=AllocSignal(nreqsig)
  608.     nreqsig:=nreq.signalnum
  609.     StartNotify(nreq)
  610. ENDPROC
  611. PROC p_RemLockConfigFile() /*"p_RemLockConfigFile()"*/
  612.     IF nreq.signalnum THEN FreeSignal(nreq.signalnum)
  613.     EndNotify(nreq)
  614. ENDPROC
  615. PROC p_InitWBHandler() HANDLE /*"p_InitWBHandler()"*/
  616.     DEF ifh
  617.     DEF ofh
  618.     DEF wbh
  619.     IF (ifh:=Open('NIL:',1006))=NIL THEN Raise(NIL)
  620.     IF (ofh:=Open('NIL:',1005))=NIL THEN Raise(NIL)
  621.     SystemTagList('L:WBStart-Handler',[SYS_INPUT,ifh,
  622.                       SYS_OUTPUT,ofh,
  623.                       SYS_ASYNCH,TRUE,
  624.                       SYS_USERSHELL,TRUE,
  625.                       NP_CONSOLETASK,NIL,
  626.                       NP_WINDOWPTR,NIL])
  627.     Delay(25)
  628.     wbh:=FindPort('WBStart-Handler Port')
  629.     Raise(wbh)
  630. EXCEPT
  631.     IF Not(wbh)
  632.     IF ifh THEN Close(ifh)
  633.     IF ofh THEN Close(ofh)
  634.     ENDIF
  635.     RETURN wbh
  636. ENDPROC
  637. PROC p_FileRequester(func,titre,action) /*"p_FileRequester(func,titre,action)"*/
  638.     DEF req:PTR TO filerequestr
  639.     DEF ret=FALSE
  640.     DEF tag
  641.     DEF curdir[256]:STRING
  642.     DEF name[80]:STRING
  643.     DEF fullname[256]:STRING
  644.     DEF doit
  645.     IF func=F_LOAD
  646.     tag:=[ASL_FUNCFLAGS,FILF_PATGAD,ASL_DIR,defdir,ASL_HAIL,titre,0]
  647.     ELSE
  648.     tag:=[ASL_DIR,defdir,ASL_FUNCFLAGS,FILF_SAVE,ASL_HAIL,titre,0]
  649.     ENDIF
  650.     IF req:=AllocAslRequest(ASL_FILEREQUEST,tag)
  651.     IF doit:=RequestFile(req)
  652.         StringF(name,'\s',req.file)
  653.         StringF(curdir,'\s',req.dir)
  654.         StrCopy(defdir,req.dir,ALL)
  655.         AddPart(req.dir,'',256)
  656.         StringF(fullname,'\s\s',req.dir,req.file)
  657.     ENDIF
  658.     FreeAslRequest(req)
  659.     ENDIF
  660.     IF doit
  661.     SELECT action
  662.         CASE ACTION_LIST
  663.         ret:=p_AjouteCRNode(commandelist,name,curdir)
  664.         CASE ACTION_CONF
  665.         SELECT func
  666.             CASE F_LOAD
  667.                p_ReadConfig(fullname)
  668.             CASE F_SAVE
  669.             p_SaveConfig(commandelist,fullname)
  670.         ENDSELECT
  671.     ENDSELECT
  672.     ENDIF
  673.     RETURN ret
  674. ENDPROC
  675. PROC p_SaveConfig(list:PTR TO lh,fichier) /*"p_SaveConfig(list:PTR TO lh,fichier)"*/
  676.     DEF h
  677.     DEF scn:PTR TO clicknode
  678.     DEF sn:PTR TO ln
  679.     IF h:=Open(fichier,1006)
  680.     Write(h,[ID_CLRU]:LONG,4)
  681.     scn:=list.head
  682.     WHILE scn
  683.         sn:=scn
  684.         IF sn.succ<>0
  685.         Write(h,[ID_COMM]:LONG,4)
  686.         Write(h,[scn.stack]:LONG,4)
  687.         Write(h,[scn.pri]:LONG,4)
  688.         Write(h,scn.currentdir,EstrLen(scn.currentdir))
  689.         Out(h,0)
  690.         Write(h,sn.name,EstrLen(sn.name))
  691.         Out(h,0)
  692.         ENDIF
  693.         scn:=sn.succ
  694.     ENDWHILE
  695.     IF h THEN Close(h)
  696.     ELSE
  697.     p_Alert('Save Error.')
  698.     ENDIF
  699. ENDPROC
  700. PROC p_ReadConfig(source) /*"p_ReadConfig(source)"*/
  701.     DEF len,a,adr,buf,handle,flen=TRUE,pos
  702.     DEF node:PTR TO ln
  703.     DEF myclicknode:PTR TO clicknode
  704.     DEF chunk,nn
  705.     DEF pv[256]:STRING
  706.     IF (flen:=FileLength(source))=-1 THEN RETURN ER_NOFILE
  707.     IF (buf:=New(flen+1))=NIL THEN RETURN ER_NOFILE
  708.     IF (handle:=Open(source,1005))=NIL THEN RETURN ER_NOFILE
  709.     len:=Read(handle,buf,flen)
  710.     Close(handle)
  711.     IF len<1 THEN RETURN ER_NOFILE
  712.     adr:=buf
  713.     chunk:=Long(adr)
  714.     IF chunk<>ID_CLRU
  715.     p_Alert('ce n\aest pas un fichier ClickRun.')
  716.     Dispose(buf)
  717.     RETURN ER_FORMAT
  718.     ENDIF
  719.     p_CleanCRList(commandelist)
  720.     FOR a:=0 TO len-1
  721.     pos:=adr++
  722.     chunk:=Long(pos)
  723.     SELECT chunk
  724.         CASE ID_COMM
  725.         node:=New(SIZEOF ln)
  726.         myclicknode:=New(SIZEOF clicknode)
  727.         node.succ:=0
  728.         myclicknode.stack:=Long(pos+4)
  729.         myclicknode.pri:=Long(pos+8)
  730.         StringF(pv,'\s',pos+12)
  731.         myclicknode.currentdir:=String(EstrLen(pv))
  732.         StrCopy(myclicknode.currentdir,pv,ALL)
  733.         pos:=pos+12+EstrLen(pv)+1
  734.         StringF(pv,'\s',pos)
  735.         node.name:=String(EstrLen(pv))
  736.         StrCopy(node.name,pv,ALL)
  737.         CopyMem(node,myclicknode.node,SIZEOF ln)
  738.         AddTail(commandelist,myclicknode.node)
  739.         nn:=p_GetNumNode(commandelist,myclicknode.node)
  740.         IF nn=0
  741.             commandelist.head:=myclicknode.node
  742.             node.pred:=0
  743.         ENDIF
  744.         IF node THEN Dispose(node)
  745.     ENDSELECT
  746.     ENDFOR
  747.     Dispose(buf)
  748.     RETURN OK_FICHIER
  749. ENDPROC
  750. PROC p_GetReqVal(typ,co) /*"p_GetReqVal(typ,co)"*/
  751.     DEF reqt:PTR TO rtfilerequester
  752.     DEF ret=NIL,num
  753.     DEF titre[256]:STRING
  754.     DEF taglist
  755.     SELECT typ
  756.     CASE GET_STACK
  757.         StringF(titre,'Stack pour :\s',co)
  758.         taglist:=[RTGL_TEXTFMT,titre,RTGL_MIN,4000,RTGL_MAX,150000,RT_LOCKWINDOW,TRUE,RT_WINDOW,cr_window,TAG_DONE,0]
  759.         num:=4000
  760.     CASE GET_PRI
  761.         StringF(titre,'Priorité pour :\s',co)
  762.         taglist:=[RTGL_TEXTFMT,titre,RT_LOCKWINDOW,TRUE,RT_WINDOW,cr_window,RTGL_MIN,-10,RTGL_MAX,10,TAG_DONE]
  763.         num:=0
  764.     ENDSELECT
  765.     IF reqt:=RtAllocRequestA(RT_REQINFO,NIL)
  766.     ret:=RtGetLongA({num},'ClickGUI',reqt,taglist)
  767.         SELECT typ
  768.         CASE GET_STACK
  769.             IF (num<4000) OR (num>150000) THEN ret:=4000 ELSE ret:=num
  770.         CASE GET_PRI
  771.             IF (num<-10) OR (num>10) THEN ret:=0 ELSE ret:=num
  772.         ENDSELECT
  773.     IF reqt THEN RtFreeRequest(reqt)
  774.     ENDIF
  775.     RETURN ret
  776. ENDPROC
  777. PROC p_ChangeCurrentData(numnode,type) /*"p_ChangeCurrentData(numnode,type)"*/
  778.     DEF chnode:PTR TO clicknode
  779.     DEF node:PTR TO ln
  780.     DEF reqt:PTR TO rtfilerequester
  781.     DEF ret=FALSE,num
  782.     DEF titre[256]:STRING
  783.     DEF taglist
  784.     IF p_EmptyList(commandelist)=-1 THEN RETURN FALSE
  785.     chnode:=p_GetAdrNode(commandelist,numnode)
  786.     node:=chnode
  787.     SELECT type
  788.     CASE GET_STACK
  789.         StringF(titre,'Nouvelle Stack pour :\s',node.name)
  790.         taglist:=[RTGL_TEXTFMT,titre,RTGL_MIN,4000,RTGL_MAX,150000,RT_LOCKWINDOW,TRUE,RT_WINDOW,cr_window,TAG_DONE,0]
  791.         num:=chnode.stack
  792.     CASE GET_PRI
  793.         StringF(titre,'Nouvelle Priorité pour :\s',node.name)
  794.         taglist:=[RTGL_TEXTFMT,titre,RT_LOCKWINDOW,TRUE,RT_WINDOW,cr_window,RTGL_MIN,-10,RTGL_MAX,10,TAG_DONE]
  795.         num:=chnode.pri
  796.     ENDSELECT
  797.     IF reqt:=RtAllocRequestA(RT_REQINFO,NIL)
  798.     ret:=RtGetLongA({num},'ClickGUI',reqt,taglist)
  799.         SELECT type
  800.         CASE GET_STACK
  801.             chnode.stack:=num
  802.         CASE GET_PRI
  803.             chnode.pri:=num
  804.         ENDSELECT
  805.     IF reqt THEN RtFreeRequest(reqt)
  806.     ENDIF
  807.     RETURN ret
  808. ENDPROC
  809. PROC p_Alert(texte) /*"p_Alert(texte)"*/
  810.     Gt_SetGadgetAttrsA(ginfo,cr_window,NIL,[GTTX_BORDER,TRUE,GTTX_TEXT,texte,TAG_DONE,0])
  811. ENDPROC
  812. PROC p_AlertEnd() /*"p_AlerEnd()"*/
  813. /********************************************************************************
  814.  * Para     : NONE
  815.  * Return    : TRUE or FALSE
  816.  * Description    : PopUp the EndRequester.
  817.  *******************************************************************************/
  818.     DEF body[1000]:STRING
  819.     StrCopy(body,'>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<\n'+
  820.          '>> ClickGui    v0.1    © 1994 NasGûl        <<\n'+
  821.          '>> GadToolsBox v37.273 © Jaba Development   <<\n'+
  822.          '>> Gui2E       v0.1    © 1994 NasGûl        <<\n'+
  823.          '>> AmigaE      v2.1b   © W. van Oortmersen  <<\n'+
  824.          '>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<\n'+
  825.          '             Voulez-vous quitter   ?          \n',ALL)
  826.     RETURN EasyRequestArgs(0,[20,0,0,body,'Oui|Non'],0,NIL)
  827. ENDPROC
  828. /******************************************/
  829. /* Main Proc                  */
  830. /******************************************/
  831. PROC main() HANDLE /*"main()"*/
  832.     DEF testmain
  833.     tattr:=['topaz.font',8,0,0]:textattr
  834.     StrCopy(defdir,'Sys:',ALL)
  835.     IF (testmain:=p_OpenLibraries())<>ER_NONE THEN Raise(testmain)
  836.     IF (testmain:=p_InitCRAPP())<>ER_NONE THEN Raise(testmain)
  837.     IF (testmain:=p_SetUpScreen())<>ER_NONE THEN Raise(testmain)
  838.     IF (testmain:=p_InitcrWindow())<>ER_NONE THEN Raise(testmain)
  839.     IF (testmain:=p_OpencrWindow())<>ER_NONE THEN Raise(testmain)
  840.     IF FileLength('Ram:Env/Clk.prefs')<>-1
  841.     p_ReadConfig('Ram:Env/Clk.prefs')
  842.     p_RendercrWindow()
  843.     ENDIF
  844.     REPEAT
  845.     p_LookAllMessage()
  846.     IF reelquit=TRUE
  847.         IF p_AlertEnd() THEN NOP ELSE reelquit:=FALSE
  848.     ENDIF
  849.     UNTIL reelquit=TRUE
  850.     Raise(ER_NONE)
  851. EXCEPT
  852.     p_RemcrWindow()
  853.     p_SetDownScreen()
  854.     p_RemCRAPP()
  855.     p_CloseLibraries()
  856.     SELECT exception
  857.     CASE ER_LOCKSCREEN; WriteF('Lock Screen Failed.')
  858.     CASE ER_VISUAL;     WriteF('Error Visual.')
  859.     CASE ER_CONTEXT;    WriteF('Error Context.')
  860.     CASE ER_MENUS;        WriteF('Error Menus.')
  861.     CASE ER_GADGET;     WriteF('Error Gadget.')
  862.     CASE ER_WINDOW;     WriteF('Error Window.')
  863.     ENDSELECT
  864. ENDPROC
  865.